#ifndef __LOG_H__
#define __LOG_H__

#include <stdio.h>
#include <sys/time.h>  // for gettimeofday
#include <time.h>

// 获取当前时间（精确到毫秒）并格式化为字符串
static inline char *time_string() {
    static char time_str[24]; // 存储时间字符串（如 "2024-03-25 14:30:00.123"）
    struct timeval tv;
    struct tm *tm_info;

    gettimeofday(&tv, NULL);          // 获取微秒级时间
    tm_info = localtime(&tv.tv_sec);   // 转换为本地时间结构体
    strftime(time_str, sizeof(time_str), "%Y-%m-%d %H:%M:%S", tm_info);

    // 追加毫秒部分（tv_usec 是微秒，除以 1000 得到毫秒）
    sprintf(time_str + 19, ".%03ld", tv.tv_usec / 1000);

    return time_str;
}

// 带时间戳的日志宏
#define LOG_INFO(fmt, ...)  printf("[%s][INFO][%s:%d] " fmt "\n", time_string(), __FILE__, __LINE__, ##__VA_ARGS__)
#define LOG_ERROR(fmt, ...) printf("[%s][ERROR][%s:%d] " fmt "\n", time_string(), __FILE__, __LINE__, ##__VA_ARGS__)
#define LOG_DEBUG(fmt, ...) printf("[%s][DEBUG][%s:%d] " fmt "\n", time_string(), __FILE__, __LINE__, ##__VA_ARGS__)

#endif // __LOG_H__